/**
 * 按钮权限认证
 */
import store from '@/store'

export default {
  // 指令插入到 DOM 中时执行
  inserted(el, binding, vnode) {
    // 从指令的绑定对象中获取传入的权限标识值
    const { value } = binding
    // 定义拥有所有权限的标识
    const all_permission = "*:*:*";
    // 从 Vuex 的 store 中获取用户的权限信息
    const permissions = store.getters && store.getters.permissions

    // 检查传入的权限标识值是否存在且为数组，并且数组长度大于 0
    if (value && value instanceof Array && value.length > 0) {
      // 将传入的权限标识值存储在变量中
      const permissionFlag = value

      // 使用 some() 方法遍历用户的权限列表，判断用户是否具有指定的权限
      const hasPermissions = permissions.some(permission => {
        // 如果用户拥有所有权限或者拥有其中之一，则返回 true
        return all_permission === permission || permissionFlag.includes(permission)
      })

      // 如果用户没有权限，则移除按钮元素
      if (!hasPermissions) {
        el.parentNode && el.parentNode.removeChild(el)
      }
    } else {
      // 如果传入的权限标识值不符合要求，则抛出错误
      throw new Error(`请设置操作权限标签值`)
    }
  }
}
